﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Net.Mail;
using Microsoft.SharePoint.Utilities;
using System.Linq;

namespace Presentation.HotSite.WebPart.VWPInscritosForumNano
{
    public partial class VWPInscritosForumNanoUserControl : UserControl
    {
        SPWeb myWeb = SPContext.Current.Web;
        private int _retrievedItemId;
        protected void Page_Load(object sender, EventArgs e)
        {
             if (!IsPostBack)
            {
                carregarCombo();
                carregarOcupacao();
                //carregarMesaTematica();
                lblAlertValidacao.Attributes.Add("display", "none");
            }
        }

        #region CARREGAR COMPONENTES.

        private void carregarCombo()
        {
            using (SPWeb mySite = SPContext.Current.Web)
            {
                SPList myList = mySite.Lists["uf"];
                ddlUf.Items.Add(new ListItem("Selecione o Estado", "-1"));
                foreach (SPListItem myItem in myList.Items)
                {
                    ddlUf.Items.Add(new ListItem(myItem["Estado"].ToString(), myItem.Title.ToString()));
                }
            }
        }

        private void carregarOcupacao()
        {
            using (SPWeb mySite = SPContext.Current.Web)
            {
                SPList myList;
                string nomeLista = Data.HotSite.Properties.SharepointStrings.ListaInscritos;
                myList = mySite.Lists[nomeLista];

                SPFieldMultiChoice myField;
                myField = (SPFieldMultiChoice)myList.Fields["Ocupação"];

                foreach (string item in myField.Choices)
                {
                    cblOcupacao.Items.Add(new ListItem(item, item));
                }
            }
        }

        //private void carregarMesaTematica()
        //{
        //    using (SPWeb mySite = SPContext.Current.Web)
        //    {
        //        string nomeLista = Data.HotSite.Properties.SharepointStrings.ListaInscritos;
        //        SPList myList = mySite.Lists[nomeLista];

        //        SPFieldMultiChoice myField;
        //        myField = (SPFieldMultiChoice)myList.Fields["Mesa Temática"];

        //        foreach (string item in myField.Choices)
        //        {
        //            cblMesaTematica.Items.Add(new ListItem(item, item));
        //        }
        //    }
        //}

        #endregion

        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    if (salvarItemFormularioCadastro())
                        CadastroComSucesso();
                });


            }
            catch (Exception ex)
            {
                ExibirMensagemErro(ex.Message);

            }
        }

        /// <summary>
        /// Exibe a mensagem de erro utilizando uma função javascript.
        /// </summary>
        /// <param name="pMensagemErro"></param>
        public void ExibirMensagemErro(string pMensagemErro)
        {
            if (string.IsNullOrEmpty(pMensagemErro))
            {
                //Response.Write("<script>alert('" + pMensagemErro + "')</script>");
                lblAlertValidacao.Text = pMensagemErro; // "O CPF nao e correito, por favor digite de novo.";
                lblAlertValidacao.Style.Add("display", "block");
            }
        }

        /// <summary>
        /// Exibe a mensagem de Sucesso de cadastro de Visitante.
        /// </summary>
        public void CadastroComSucesso()
        {
            Response.Write(@"<script>alert('Dados salvos com sucesso! Confira sua caixa de e-mail.'); location.href='../../default.aspx';</script>");
        }

        #region SALVAR DADOS

        private bool salvarItemFormularioCadastro()
        {
            SPList myList;
            SPListItem myItem;
            bool retorno = true;

            myList = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos]; //myWeb.Lists["Inscritos"];
            myItem = myList.Items.Add();


            if (txtCpf.Text != "")
            {
                if (isExisteCpf(txtCpf.Text))
                {
                    RetornoComError("ExisteCPF");
                    return false;
                }
                else if (!isValidoCpf(txtCpf.Text))
                {
                    RetornoComError("ErrorCPF");
                    return false;
                }
            }

            var checkListOcupacao = cblOcupacao.Items.Cast<ListItem>().Where(i => i.Selected == true).Select(i => new { Valor = i.Value }).ToList();
            string ocupacaoListItens = "";

            foreach (var item in checkListOcupacao)
            {
                ocupacaoListItens += item.Valor + ";";
            }
            ocupacaoListItens = ocupacaoListItens.TrimEnd(';');

            var checkListDataEvento = cblMesaTematica.Items.Cast<ListItem>().Where(i => i.Selected == true).Select(i => new { Valor = i.Value }).ToList();
            string dataEventoListItens = "";

            foreach (var item in checkListDataEvento)
            {
                dataEventoListItens += item.Valor + ";";
            }
            dataEventoListItens = dataEventoListItens.TrimEnd(';');

            myItem["nome"] = txtNome.Text;
            myItem["CPF"] = txtCpf.Text.Trim();
            myItem["RG"] = txtRg.Text;
            myItem["endereco"] = txtEndereco.Text;
            myItem["cidade"] = txtCidade.Text;
            myItem["UF"] = ddlUf.SelectedValue.ToString();
            myItem["CEP"] = txtCep.Text;
            myItem["email"] = txtEmail.Text;
            myItem["instituicao"] = txtInstitucao.Text;

            SPFieldMultiChoiceValue itemValue = new SPFieldMultiChoiceValue();
            var choiceValues = ocupacaoListItens.Trim().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var item in choiceValues)
            {
                itemValue.Add(item);
            }
            myItem["ocupacao"] = itemValue;

            SPFieldMultiChoiceValue itemDataValue = new SPFieldMultiChoiceValue();
            var dataValues = dataEventoListItens.Trim().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var item in dataValues)
            {
                itemDataValue.Add(item);
            }

            myItem["dataEvento"] = itemDataValue;

            myItem["Email_x0020_Enviado"] = true;
            myItem.Update();
            _retrievedItemId = myItem.ID;
            envioMensagemCadastroVisitante(txtNome.Text, txtEmail.Text);

            return retorno;
        }

        private void envioMensagemCadastroVisitante(String nomeDestino, String destinoEmail)
        {
            //SPList myListEmail = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaDadosEventos]; // myWeb.Lists["DadosEventos"];
            //var myItemEmail = myListEmail.Items.Cast<SPListItem>().Select(p => new 
            //{
            //    Assunto = p["assunto"],
            //    Origem = p["origem"],
            //    Mensagem = p["mensagem"],
            //    Criado = p["Criado"]
            //})
            //.OrderByDescending(p => p.Criado)
            //.FirstOrDefault();

            //if (myItemEmail == null)
            //{
            //    throw new Exception("Evento não encontrado");
            //}

            //String AssuntoEmail, OrigemEmail, MensagemEmail;
            //AssuntoEmail = myItemEmail.Assunto != null ? myItemEmail.Assunto.ToString() : string.Empty;
            //OrigemEmail = myItemEmail.Origem != null ? myItemEmail.Origem.ToString() : string.Empty;
            //MensagemEmail = myItemEmail.Mensagem != null ? myItemEmail.Mensagem.ToString() : string.Empty;

            //MensagemEmail = MensagemEmail.Replace("dt_Nome", "<b>" + txtNome.Text + "</b>");

            //try
            //{
            //    System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
            //    System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

            //    correo.From = new System.Net.Mail.MailAddress(OrigemEmail);
            //    correo.To.Add(new MailAddress(txtEmail.Text, txtNome.Text));
            //    correo.Subject = "Inscrição";
            //    correo.Body = string.Format("<br /><br />{0}<br />{1}", DateTime.Now.ToShortDateString().ToString(), MensagemEmail);
            //    correo.IsBodyHtml = true;
            //    correo.Priority = System.Net.Mail.MailPriority.Normal; // Prioridad

            //    smtp.Host = Data.HotSite.Properties.SharepointStrings.SmtpHostIp; // "192.168.0.199";
            //    //smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");
            //    smtp.EnableSsl = false;
            //    smtp.Send(correo);
            //}
            //catch (Exception e)
            //{
            //    #if DEBUG
            //        //Response.Write(string.Format("<script>alert(\"{0} :( \");</script>",e.Message));
            //        lblAlertValidacao.Text = string.Format("{0}", e.Message);
            //        lblAlertValidacao.Attributes.Add("display", "");
            //    #endif

            //    var myList = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos];
            //    var item = myList.GetItemById(_retrievedItemId);
            //    item["Email_x0020_Enviado"] = false;
            //    item.Update();
            //    //Response.Write(string.Format("<script>alert(\"Problemas no envio de e-mail :( \");</script>"));
            //    lblAlertValidacao.Text = string.Format("{0}", e.Message);
            //    lblAlertValidacao.Attributes.Add("display", "");
            //}

            SPList myListEmail = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaDadosEventos];
            String assuntoEmail = "", origemEmail = "", mensagemEmail = "";
            var myItemEmail = myListEmail.Items.Cast<SPListItem>().ToList();

            assuntoEmail = myItemEmail[0]["assunto"].ToString();
            origemEmail = myItemEmail[0]["origem"].ToString();
            mensagemEmail = myItemEmail[0]["mensagem"].ToString();


            String msgEmail = String.Format(@"
                        <b>Prezado {0}</b>
                        <br />
                        <br />
                        {1}
                        <br />
                ", nomeDestino
                 , mensagemEmail);

            enviarEmail(origemEmail, destinoEmail, assuntoEmail, msgEmail);

        }

        private void enviarEmail(String emailFrom, String emailTo, String assunto, String bodyMessage)
        {
            //create the mail message
            MailMessage mail = new MailMessage();

            //set the addresses
            //to specify a friendly 'from' name, we use a different ctor
            mail.From = new MailAddress(emailFrom);
            mail.To.Add(emailTo);
            mail.IsBodyHtml = true;

            //set the content
            mail.Subject = assunto;
            mail.Body = bodyMessage;

            //send the message
            SmtpClient smtp = new SmtpClient(Data.HotSite.Properties.SharepointStrings.SmtpHostIp);
            smtp.Send(mail);

        }

        private void RetornoComError(string tError)
        {
            if (tError.Equals("ExisteCPF"))
            {
                lblErrorCPF.Text = "O CPF já existe!";
                lblErrorCPF.Style.Add("display", "block");
            }
            else if (tError.Equals("ErrorCPF"))
            {
                lblErrorCPF.Text = "Por favor, digite um CPF válido!.";
                lblErrorCPF.Style.Add("display", "block");
            }
            //lblErrorCPF.Style.Add("display", "none");
            txtNome.Text = txtNome.Text.Equals("") ? "" : txtNome.Text;
            //ddlNacionalidade.SelectedValue = ddlNacionalidade.SelectedValue;
            txtCpf.Text = txtCpf.Text.Equals("") ? "" : txtCpf.Text;
            txtRg.Text = txtRg.Text.Equals("") ? "" : txtRg.Text;
            txtEndereco.Text = txtEndereco.Text.Equals("") ? "" : txtEndereco.Text;
            txtCidade.Text = txtCidade.Text.Equals("") ? "" : txtCidade.Text;
            ddlUf.SelectedValue = ddlUf.SelectedValue;
            txtCep.Text = txtCep.Text.Equals("") ? "" : txtCep.Text;
            txtEmail.Text = txtEmail.Text.Equals("") ? "" : txtEmail.Text;
            txtInstitucao.Text = txtInstitucao.Text.Equals("") ? "" : txtInstitucao.Text;
        }

        /// <summary>
        /// Verifica a existencia de CPF dentro da lista.
        /// </summary>
        /// <param name="valorCPF">valor CPF prenchido no TextBox</param>
        /// <returns></returns>
        private bool isExisteCpf(string valorCPF)
        {
            Boolean existe = false;
            SPListItemCollection listItems = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos].Items; // myWeb.Lists["Inscritos"].Items;

            foreach (SPListItem oItem in listItems)
            {
                String cpfLista = oItem["CPF"] == null ? "" : oItem["CPF"].ToString();
                if (cpfLista.Equals(valorCPF))
                {
                    existe = true;
                    break;
                }
            }

            return existe;
        }

        private Boolean isValidoCpf(String vrCPF)
        {
            string valor = vrCPF.Replace(".", "");
            valor = valor.Replace("-", "");

            if (valor.Length != 11)
                return false;

            bool igual = true;
            for (int i = 1; i < 11 && igual; i++)
                if (valor[i] != valor[0])
                    igual = false;

            if (igual || valor == "12345678909")
                return false;

            int[] numeros = new int[11];

            for (int i = 0; i < 11; i++)
                numeros[i] = int.Parse(
                  valor[i].ToString());

            int soma = 0;
            for (int i = 0; i < 9; i++)
                soma += (10 - i) * numeros[i];

            int resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[9] != 0)
                    return false;
            }

            else if (numeros[9] != 11 - resultado)
                return false;

            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += (11 - i) * numeros[i];

            resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[10] != 0)
                    return false;
            }
            else
                if (numeros[10] != 11 - resultado)
                    return false;

            return true;
        }
        
        #endregion
    }

        }
    

